package com.test.fileapplication.util;

import android.text.TextUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * author: houxiansheng
 * <p>
 * time：2019-12-24 16:49:56
 * <p>
 * describe：时间转换类
 */
public class TimeUtils {
    // formatType格式为yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒
    // data Date类型的时间
    public static String dateToString(Date data, String formatType) {
        return new SimpleDateFormat(formatType).format(data);
    }

    // currentTime要转换的long类型的时间
    // formatType要转换的string类型的时间格式
    public static String longToString(long currentTime, String formatType) {
        Date date = null;
        date = longToDate(currentTime, formatType); // long类型转成Date类型
        String strTime = dateToString(date, formatType); // date类型转成String
        return strTime;
    }

    // strTime要转换的string类型的时间，formatType要转换的格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日
    // HH时mm分ss秒，
    // strTime的时间格式必须要与formatType的时间格式相同
    public static Date stringToDate(String strTime, String formatType)
            throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat(formatType);
        Date date = null;
        date = formatter.parse(strTime);
        return date;
    }

    // currentTime要转换的long类型的时间
    // formatType要转换的时间格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒
    public static Date longToDate(long currentTime, String formatType) {
        Date dateOld = new Date(currentTime); // 根据long类型的毫秒数生命一个date类型的时间
        String sDateTime = dateToString(dateOld, formatType); // 把date类型的时间转换为string
        Date date = null;
        try {
            date = stringToDate(sDateTime, formatType); // 把String类型转换为Date类型
        } catch (ParseException e) {
//            e.printStackTrace();
//            LogUtils.e ("error",e);
        }
        return date;
    }

    // strTime要转换的String类型的时间
    // formatType时间格式
    // strTime的时间格式和formatType的时间格式必须相同
    public static long stringToLong(String strTime, String formatType)
            throws ParseException {
        Date date = stringToDate(strTime, formatType); // String类型转成date类型
        if (date == null) {
            return 0;
        } else {
            long currentTime = dateToLong(date); // date类型转成long类型
            return currentTime;
        }
    }

    // date要转换的date类型的时间
    public static long dateToLong(Date date) {
        return date.getTime();
    }

    public static String getVideoTime(RemoteFile remoteFile) {
        if (!TextUtils.isEmpty(remoteFile.getDuration())) {
            Long time = Long.parseLong(remoteFile.getDuration());
            if (time < 60) {//秒
                if (time < 10) {
                    return "00:0" + time;
                } else {
                    return "00:" + time;
                }
            } else if (time < 60 * 60) {
                return longToString(time * 1000, "mm:ss");
            } else {
                return longToString(time * 1000, "HH:mm:ss");
            }
        } else {
            return "00:00";
        }
    }

    public static final String DAY = "yyyy-MM-dd";
    public static final String MONTH = "yyyy-MM";
    public static final String YEAR = "yyyy";

    // 是否为当前时间(年,月,日)
    public static boolean isThisTime(long time, String pattern) {
        Date date = new Date(time);
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String param = sdf.format(date);//参数时间
        String now = sdf.format(new Date());//当前时间
        if (param.equals(now)) {
            return true;
        }
        return false;
    }

    // 是否为当前日
    //deviation 偏差值,正为往后,负为之前
    public static boolean isThisDay(long time, int deviation) {
        time -= deviation * 86400000;
        return isThisTime(time, DAY);
    }

    //世界时间转换北京时间  long
    public static long UTCToCST(String UTCStr, String format) {
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            date = sdf.parse(UTCStr);
        } catch (ParseException e) {
//            e.printStackTrace();
//            LogUtils.e ("error",e);
            return 0;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + 8);
        return calendar.getTimeInMillis();
    }
}
